﻿using library.Command;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;

namespace library.ViewModel
{
    internal class LoginViewModel : INotifyPropertyChanged
    {

        // 声明下, 先暂时固定这种方式编写
        public event PropertyChangedEventHandler PropertyChanged;

        // 当前 ViewModel 绑定的界面
        private MainWindow _main;

        public LoginViewModel(MainWindow main)
        {
            _main = main;
        }

        // 重写下方法
        private void RaisePropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
                handler(this, new PropertyChangedEventArgs(propertyName));
        }

        // 以 property 持有一个 Model 的引用
        private LoginModel _loginModel = new LoginModel();

        public string UserName
        {
            get { return _loginModel.UserName; }
            set { _loginModel.UserName = value; RaisePropertyChanged("UserName"); }
        }

        public string Password
        {
            get { return _loginModel.Password; }
            set { _loginModel.Password = value; RaisePropertyChanged("Password"); }
        }


        /// <summary>
        /// 登录方法
        /// </summary>
        public void LoginFunc()
        {
            if (UserName == "admin" && Password == "123456")
            {
                // 密码验证成功, 跳转到 Index 页面
                Index index = new Index();
                index.Show();

                // 隐藏当前界面
                _main.Hide();
            }
            else
            {
                // 弹出一个告警框
                MessageBox.Show("输入的用户名或者密码不正确");

                UserName = "";
                Password = "";
            }
        }

        bool CanLoginExecute() { return true; }

        // 命令，用于界面的绑定
        public ICommand LoginAction
        {
            get
            {
                // 当前命令要执行的方法就是这个 LoginFunc
                return new RelayCommand(LoginFunc, CanLoginExecute);
            }
        }
    }


}
